package com.javacv.plus.core.processor;

import lombok.Data;

import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;

/**
 * 处理器上下文
 * 用于在处理步骤之间传递数据和状态
 */
@Data
public class ProcessorContext {

    /**
     * 上下文属性存储
     */
    private final Map<String, Object> attributes = new ConcurrentHashMap<>();

    /**
     * 最后一次处理的结果
     */
    private Object lastResult;

    /**
     * 处理开始时间
     */
    private long startTime = System.currentTimeMillis();

    /**
     * 是否已取消
     */
    private volatile boolean cancelled = false;

    /**
     * 设置属性
     */
    public void setAttribute(String key, Object value) {
        attributes.put(key, value);
    }

    /**
     * 获取属性
     */
    @SuppressWarnings("unchecked")
    public <T> T getAttribute(String key) {
        return (T) attributes.get(key);
    }

    /**
     * 获取属性，如果不存在则返回默认值
     */
    @SuppressWarnings("unchecked")
    public <T> T getAttribute(String key, T defaultValue) {
        return (T) attributes.getOrDefault(key, defaultValue);
    }

    /**
     * 移除属性
     */
    public Object removeAttribute(String key) {
        return attributes.remove(key);
    }

    /**
     * 检查是否包含属性
     */
    public boolean hasAttribute(String key) {
        return attributes.containsKey(key);
    }

    /**
     * 清空所有属性
     */
    public void clearAttributes() {
        attributes.clear();
    }

    /**
     * 获取已用时间（毫秒）
     */
    public long getElapsedTime() {
        return System.currentTimeMillis() - startTime;
    }

    /**
     * 取消处理
     */
    public void cancel() {
        this.cancelled = true;
    }

    /**
     * 重置上下文
     */
    public void reset() {
        attributes.clear();
        lastResult = null;
        startTime = System.currentTimeMillis();
        cancelled = false;
    }
} 